package com.stars.system.reim.mapper;

import com.stars.system.reim.domain.ReimDailyOverdue;
import com.stars.system.reim.domain.ReimDailyRecord;
import com.stars.system.reim.domain.ReimDailyRecordVO;
import com.stars.system.reim.domain.ReimDailyStatInfo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 报销记录（个人）Mapper接口
 * 
 * @author shuaibizhe
 * @date 2022-11-14
 */
public interface ReimDailyRecordMapper
{
    /**
     * 查询报销记录（个人）
     * 
     * @param reimId 报销记录（个人）主键
     * @return 报销记录（个人）
     */
    public ReimDailyRecord selectReimDailyRecordByReimId(String reimId);

    /**
     * 查询报销记录（个人）列表
     * 
     * @param reimRecord 报销记录（个人）
     * @return 报销记录（个人）集合
     */
    public List<ReimDailyRecord> selectReimDailyRecordList(ReimDailyRecord reimRecord);

    /**
     * 查询报销记录（部门）列表
     *
     * @param reimRecord 报销记录（部门）
     * @param deptId 部门Id
     * @return 报销记录（部门）集合
     */
    public List<ReimDailyRecord> selectReimRecordListByDept(@Param("reimRecord") ReimDailyRecord reimRecord, @Param("deptId") Long deptId);

    /**
     * 新增报销记录（个人）
     * 
     * @param reimRecord 报销记录（个人）
     * @return 结果
     */
    public int insertReimDailyRecord(ReimDailyRecord reimRecord);

    /**
     * 修改报销记录（个人）
     * 
     * @param reimRecord 报销记录（个人）
     * @return 结果
     */
    public int updateReimDailyRecord(ReimDailyRecord reimRecord);

    /**
     * 删除报销记录（个人）
     * 
     * @param reimId 报销记录（个人）主键
     * @return 结果
     */
    public int deleteReimRecordByReimId(String reimId);

    /**
     * 批量删除报销记录（个人）
     * 
     * @param reimIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteReimDailyRecordByReimIds(String[] reimIds);

    /**
     * 根据主键集查询数据记录
     *
     * @param reimIds 数据主键集合
     * @return 结果
     */
    public List selectReimDailyRecordByReimIds(String[] reimIds);

    /**
     * 根据主键集与报销类型查询数据记录
     * @param reimType 报销类型
     * @param reimIds 数据主键集合
     * @return 结果
     */
    public List selectReimDailyRecordByReimIdsAndType(@Param("reimIds") String[] reimIds, @Param("reimType") String reimType);

    /**
     * 统计前确认数据
     *
     * @param reimIds 报销记录（个人）主键
     * @param cycle 周期
     * @return 结果
     */
    public int confirmDailyBeforeStat(@Param("reimIds") String[] reimIds, @Param("cycle") int cycle);

    /**
     * 统计数据
     *
     * @param reimIds 报销记录（个人）主键
     * @return 结果
     */
    public List<ReimDailyStatInfo> statReimDailyRecord(@Param("reimIds") String[] reimIds);

    /**
     * 将数据标记为报销完成
     *
     * @param reimIds 报销记录（个人）主键
     * @return 结果
     */
    public int completeReimDailyRecord(@Param("reimIds") String[] reimIds, @Param("exportId") String exportId);

    /**
     * 查询逾期记录数量
     *
     * @param cycle 逾期周期
     * @return 结果
     */
    public List<ReimDailyOverdue> countDailyOverdueRecords(@Param("cycle") int cycle, @Param("reimSpender") Long reimSpender);

    /**
     * 根据年月进行记录聚合，用于统计每月报销情况
     * @return
     */
    public ReimDailyRecordVO buildRecordsByMonthGroup(@Param("month") String month, @Param("date") Date date, @Param("reimSpender") Long reimSpender);
}
